from typing import Union, Optional

from fastapi import Query
from pydantic import BaseModel, Field

from like.schema_base import EmptyStrToNone


class MedicalDiseaseClassificationIcd20ListIn(BaseModel):
    """存储疾病分类国际临床版 2.0 相关信息的列表参数"""
    id: Union[int, None, EmptyStrToNone] = Query()  # 唯一标识该条记录的主键，自增整数
    name: Union[str, None, EmptyStrToNone] = Query()  # 用于存储疾病的名称，长度不超过 255 个字符
    code: Union[str, None, EmptyStrToNone] = Query()  # 用于存储疾病对应的编码，长度不超过 50 个字符


class MedicalDiseaseClassificationIcd20ExportIn(MedicalDiseaseClassificationIcd20ListIn):  
    """存储疾病分类国际临床版 2.0 相关信息的导出参数"""
    export: Union[int, None] = Query()  # 导出模式
    page_start: Optional[int] = None    # 导出起始页
    page_end: Optional[int] = None      # 导出结束页
    page_size: int = Query()            # 每页数量
    file_name: Optional[str] = None     # 导出文件名    


class MedicalDiseaseClassificationIcd20DetailIn(BaseModel):
    """存储疾病分类国际临床版 2.0 相关信息的详情参数"""
    id: int = Query(gt=0)  # 唯一标识该条记录的主键，自增整数


class MedicalDiseaseClassificationIcd20AddIn(BaseModel):
    """存储疾病分类国际临床版 2.0 相关信息的新增参数"""
    name: str  # 用于存储疾病的名称，长度不超过 255 个字符
    code: str  # 用于存储疾病对应的编码，长度不超过 50 个字符


class MedicalDiseaseClassificationIcd20EditIn(BaseModel):
    """存储疾病分类国际临床版 2.0 相关信息的编辑参数"""
    name: str  # 用于存储疾病的名称，长度不超过 255 个字符
    code: str  # 用于存储疾病对应的编码，长度不超过 50 个字符


class MedicalDiseaseClassificationIcd20DelIn(BaseModel):
    """存储疾病分类国际临床版 2.0 相关信息的删除参数"""
    id: int = Field(gt=0)  # 唯一标识该条记录的主键，自增整数


class MedicalDiseaseClassificationIcd20Out(BaseModel):
    """存储疾病分类国际临床版 2.0 相关信息的返回信息"""
    id: Optional[int]  # 唯一标识该条记录的主键，自增整数
    name: str  # 用于存储疾病的名称，长度不超过 255 个字符
    code: str  # 用于存储疾病对应的编码，长度不超过 50 个字符
    create_time: Optional[int]  # 
    update_time: Optional[int]  # 

    class Config:
        orm_mode = True
